/**
 * 图片工具函数
 * 更新版本：移除Base64处理，只处理文件路径
 */

/**
 * 处理头像URL显示
 * @param {string} avatar - 头像文件路径或null
 * @param {number} gender - 性别（1-男性，2-女性）
 * @returns {string} 处理后的头像URL
 */
export function getAvatarUrl(avatar, gender = 1) {
	if (avatar) {
		// 检查是否是完整的URL
		if (avatar.startsWith('http://') || avatar.startsWith('https://')) {
			return avatar;
		}
		// 如果是相对路径，添加基础URL
		if (avatar.startsWith('/')) {
			return `http://localhost:8080${avatar}`;
		}
		// 如果是文件路径，添加基础URL
		return `http://localhost:8080/picture/${avatar}`;
	}
	
	// 根据性别返回默认头像
	if (gender === 1) {
		return '/static/images/mUser.png';
	} else if (gender === 2) {
		return '/static/images/fUser.png';
	}
	// 默认使用男性头像
	return '/static/images/mUser.png';
}

/**
 * 处理图片URL显示
 * @param {string} imageUrl - 图片文件路径
 * @param {string} defaultImage - 默认图片路径
 * @returns {string} 处理后的图片URL
 */
export function getImageUrl(imageUrl, defaultImage = '/static/images/default-image.jpg') {
	if (imageUrl) {
		// 检查是否是完整的URL
		if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
			return imageUrl;
		}
		// 如果是相对路径，添加基础URL
		if (imageUrl.startsWith('/')) {
			return `http://localhost:8080${imageUrl}`;
		}
		// 如果是文件路径，添加基础URL
		return `http://localhost:8080/picture/${imageUrl}`;
	}
	
	return defaultImage;
}

/**
 * 处理活动封面URL显示
 * @param {string} coverUrl - 封面文件路径
 * @returns {string} 处理后的封面URL
 */
export function getActivityCoverUrl(coverUrl) {
	return getImageUrl(coverUrl, '/static/images/default-activity.jpg');
}

/**
 * 处理推送封面URL显示
 * @param {string} coverImageUrl - 推送封面文件路径
 * @returns {string} 处理后的封面URL
 */
export function getPushCoverUrl(coverImageUrl) {
	return getImageUrl(coverImageUrl, '/static/images/default-push.jpg');
}

/**
 * 处理用户头像URL显示
 * @param {string} avatar - 头像文件路径
 * @param {number} gender - 性别
 * @returns {string} 处理后的头像URL
 */
export function getUserAvatarUrl(avatar, gender = 1) {
	return getAvatarUrl(avatar, gender);
}

/**
 * 处理医生头像URL显示
 * @param {string} avatar - 医生头像文件路径
 * @param {number} gender - 性别
 * @returns {string} 处理后的头像URL
 */
export function getDoctorAvatarUrl(avatar, gender = 1) {
	return getAvatarUrl(avatar, gender);
}

/**
 * 上传图片到服务器
 * @param {string} filePath - 本地文件路径
 * @param {string} type - 图片类型（avatar, cover, cover_image）
 * @returns {Promise<string>} 返回服务器文件路径
 */
export function uploadImage(filePath, type = 'avatar') {
	return new Promise((resolve, reject) => {
		// 获取用户类型和token
		const token = uni.getStorageSync('token');
		const userType = uni.getStorageSync('userType'); // 'doctor' 或 'user'
		
		// 如果是医生头像上传，使用专门的医生头像上传接口
		if (type === 'avatar' && userType === 'doctor') {
			uni.uploadFile({
				url: 'http://localhost:8080/doctor/uploadAvatar',
				filePath: filePath,
				name: 'avatar',
				header: {
					'Authorization': `Bearer ${token}`
				},
				success: (res) => {
					try {
						const data = JSON.parse(res.data);
						if (data.code === 200) {
							// 医生头像上传接口返回的是完整URL，需要提取文件路径
							const fullUrl = data.data.avatarUrl;
							const filePath = fullUrl.replace('http://localhost:8080/picture/', '');
							resolve(filePath);
						} else {
							reject(new Error(data.message || '上传失败'));
						}
					} catch (error) {
						reject(new Error('解析响应失败'));
					}
				},
				fail: (error) => {
					reject(error);
				}
			});
		} else {
			// 其他情况使用通用上传接口
			uni.uploadFile({
				url: 'http://localhost:8080/upload/image',
				filePath: filePath,
				name: 'file',
				formData: {
					type: type
				},
				header: {
					'Authorization': `Bearer ${token}`
				},
				success: (res) => {
					try {
						const data = JSON.parse(res.data);
						if (data.code === 200) {
							// 返回文件路径
							resolve(data.data.filePath);
						} else {
							reject(new Error(data.message || '上传失败'));
						}
					} catch (error) {
						reject(new Error('解析响应失败'));
					}
				},
				fail: (error) => {
					reject(error);
				}
			});
		}
	});
}

/**
 * 选择并上传图片
 * @param {string} type - 图片类型
 * @returns {Promise<string>} 返回服务器文件路径
 */
export function selectAndUploadImage(type = 'avatar') {
	return new Promise((resolve, reject) => {
		uni.chooseImage({
			count: 1,
			sizeType: ['compressed'],
			sourceType: ['album', 'camera'],
			success: (res) => {
				const filePath = res.tempFilePaths[0];
				uploadImage(filePath, type)
					.then(resolve)
					.catch(reject);
			},
			fail: (error) => {
				reject(error);
			}
		});
	});
}
